home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / Oberon⁄F™ 1.2 / Preinstalled version / Obx / Mod / Controls (.txt) < prev    next >
Encoding:
Oberon Document  |  1995-08-09  |  5.3 KB  |  119 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Helvetica
  16. Helvetica
  17. Helvetica
  18. MODULE ObxControls;
  19.     IMPORT Dialog, Ports, Properties, Views;
  20.     CONST beginner = 0; advanced = 1; expert = 2; guru = 3;    (* user classes *)
  21.     TYPE
  22.         Size* = RECORD (Dialog.Enumeration) END;    (* customized enumeration *)
  23.         View = POINTER TO RECORD (Views.ViewDesc)
  24.             size: LONGINT    (* border size in mm *)
  25.         END;
  26.         data*: RECORD (Dialog.Interactor)
  27.             class*: INTEGER;    (* current user class *)
  28.             list*: Size;    (* list of currently available sizes, derived from class *)
  29.             width*: LONGINT    (* width of next view to be opened. Derived from
  30.                                         class, or entered through a text entry field *)
  31.         END;
  32.         predef: ARRAY 6 OF LONGINT;    (* table of predefined sizes *)
  33.     (* Size *)
  34.     PROCEDURE (VAR s: Size) GetName* (i: LONGINT; VAR name: Dialog.String);
  35.     BEGIN    (* return string for a given list entry *)
  36.         IF i = 0 THEN name := "default"
  37.         ELSIF (i = 1) & (data.class >= advanced) THEN name := "small"
  38.         ELSIF (i = 2) & (data.class >= advanced) THEN name := "medium"
  39.         ELSIF (i = 3) & (data.class >= advanced) THEN name := "large"
  40.         ELSIF (i = 4) & (data.class >= expert) THEN name := "tiny"
  41.         ELSIF (i = 5) & (data.class >= expert) THEN name := "huge"
  42.         ELSE name := ""
  43.         END
  44.     END GetName;
  45.     (* View *)
  46.     PROCEDURE (v: View) CopyFrom (source: Views.View);
  47.     BEGIN
  48.         v.size := source(View).size
  49.     END CopyFrom;
  50.     PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: LONGINT);
  51.     BEGIN    (* fill view with a red square of size v.size *)
  52.         IF v.size = 0 THEN v.size := predef[0] END;    (* lazy initialization of size *)
  53.         f.DrawRect(0, 0, v.size, v.size, Ports.fill, Ports.red)
  54.     END Restore;
  55.     PROCEDURE (v: View) HandlePropMsg (VAR msg: Views.PropMessage);
  56.     BEGIN
  57.         WITH msg: Properties.SizePref DO
  58.             IF v.size = 0 THEN v.size := predef[0] END;    (* lazy initialization of size *)
  59.             msg.w := v.size; msg.h := v.size    (* tell environment about desired width and height *)
  60.         ELSE    (* ignore other messages *)
  61.         END
  62.     END HandlePropMsg;
  63.     (* notifiers *)
  64.     PROCEDURE ClassNotify* (op, from, to: LONGINT);
  65.     BEGIN    (* react to change in data.class *)
  66.         IF op = Dialog.changed THEN
  67.             IF (to = beginner) OR (to = advanced) & (data.list.val > 3) THEN
  68.                 (* if class is reduced, make sure that selection contains legal elements *)
  69.                 data.list.val := 0; data.width := predef[0];    (* modify interactor *)
  70.                 Dialog.Update(data)    (* redraw controls where necessary *)
  71.             END;
  72.             Dialog.UpdateList(data.list);    (* reconstruct list box contents *)
  73.             Dialog.CheckGuards    (* reevaluate all control guards *)
  74.         END
  75.     END ClassNotify;
  76.     PROCEDURE ListNotify* (op, from, to: LONGINT);
  77.     BEGIN    (* reacto to change in data.list (index to was selected) *)
  78.         IF op = Dialog.changed THEN
  79.             data.width := predef[to];    (* modify interactor *)
  80.             Dialog.Update(data);    (* redraw controls where necessary *)
  81.             Dialog.CheckGuards    (* reevaluate all control guards *)
  82.         END
  83.     END ListNotify;
  84.     (* guards *)
  85.     PROCEDURE ListGuard* (VAR par: Dialog.Par);
  86.     BEGIN    (* disable list box for a beginner *)
  87.         IF data.class = beginner THEN par.disabled := TRUE END
  88.     END ListGuard;
  89.     PROCEDURE WidthGuard* (VAR par: Dialog.Par);
  90.     BEGIN    (* make text entry field read-only if user is not guru *)
  91.         IF data.class # guru THEN par.readOnly := TRUE END
  92.     END WidthGuard;
  93.     (* commands *)
  94.     PROCEDURE Open*;
  95.         VAR res: LONGINT; v: View;
  96.     BEGIN
  97.         NEW(v);    (* create and initialize a new view *)
  98.         v.size := data.width * Ports.mm;    (* define view's size in function of class *)
  99.         Views.OpenAux(v, "Example")    (* open the view in a window *)
  100.     END Open;
  101. BEGIN    (* initialization of global variables *)
  102.     predef[0] := 40; predef[1] := 30; predef[2] := 50;    (* predefined sizes *)
  103.     predef[3] := 70; predef[4] := 20; predef[5] := 100;
  104.     data.class := beginner;    (* default values *)
  105.     data.list.val := 0;
  106.     data.width := predef[0]
  107. END ObxControls.
  108. TextControllers.StdCtrlDesc
  109. TextControllers.ControllerDesc
  110. Containers.ControllerDesc
  111. Controllers.ControllerDesc
  112. TextRulers.StdRulerDesc
  113. TextRulers.RulerDesc
  114. TextRulers.StdStyleDesc
  115. TextRulers.StyleDesc
  116. TextRulers.AttributesDesc
  117. Helvetica
  118. Documents.ControllerDesc
  119.